package com.mofum.cloud.core.handler;

import com.mofum.cloud.core.error.ins.InstructionNotFoundException;
import com.mofum.cloud.core.error.ins.InstructionRegisterException;
import com.mofum.cloud.core.model.Instruction;

import java.math.BigInteger;

/**
 * 指令操作池
 * ===================================================================
 * <p> 指令操作池主要是负责将已经实现的CPU 指令的算法放入到指令池中，一个指令池
 * <p> 它可以拥有一个运行环境上下文，这个上下文存储CPU指令的运行变量，其中包括
 * <p> 不同的寄存器，驱动内容。
 * ===================================================================
 *
 * @author yumi@omuao.com
 */
public interface InstructionsHandlerPool {

    /**
     * 注册指令
     *
     * @param instruction 指令
     * @throws InstructionRegisterException 注册异常
     */
    void registerInstruction(Instruction instruction) throws InstructionRegisterException;

    /**
     * 注册指令
     *
     * @param instruction 注册指令异常
     * @return true 成功, false 失败
     */
    boolean registerIns(Instruction instruction);


    /**
     * 根据ID 查找 指令
     *
     * @param commandId 指令ID
     * @return 指令
     * @throws InstructionNotFoundException 指令未找到异常
     */
    Instruction findInstructionById(BigInteger commandId) throws InstructionNotFoundException;

}
